﻿using System;
using System.Data;
using System.Windows.Forms;
using SiGeCoPre.Presupuesto_BL;
using SiGeCoPre.Presupuesto_DTO;
using SiGeCoPre.Presupuesto_Factory;
using SiGeCoPre.Presupuesto_Util;
using SiGeCoPre.Presupuesto_ViewGeneral;

namespace SiGeCoPre.Presupuesto_ViewModificacion
{
    /// <summary>
    /// Formulario para modificar empleados
    /// </summary>
    public partial class frmModificarEmpleado : Form
    {
        static String usuario = "";
        BLEmpleados createEmpleado = BLFactoryPresupuesto.createEmpleado();
        BLSectores createSector = BLFactoryPresupuesto.createSector();

        public frmModificarEmpleado()
        {
            InitializeComponent();
        }

        private void btnBuscar_Click(object sender, EventArgs e)
        {
            frmEmpleados empleados = new frmEmpleados();
            empleados.FormClosed += new FormClosedEventHandler(empleados_FormClosed);
            empleados.Show();
        }

        private void empleados_FormClosed(object sender, FormClosedEventArgs e)
        {
            usuario = frmEmpleados.pasarUsuario();
            if (usuario != "")
            {
                txtBusqueda.Text = usuario;
            }
        }

        private void txtBusqueda_TextChanged(object sender, EventArgs e)
        {
            try
            {
                if (string.IsNullOrEmpty(txtBusqueda.Text.Trim()))
                {
                    txtApellido.Text = "";
                    txtMail.Text = "";
                    txtNombre.Text = "";
                    txtPassword.Text = "";
                    txtRePass.Text = "";
                    txtUsuario.Text = "";
                    cmbSector.Text = "";
                    return;
                }

                empleadosDTO em = createEmpleado.getEmpleado(txtBusqueda.Text);

                if (null != em)
                {
                    txtApellido.Text = em.Apellido;
                    txtMail.Text = em.Mail;
                    txtNombre.Text = em.Nombre;
                    txtPassword.Text = em.Password;
                    txtUsuario.Text = em.Usuario;
                    cmbSector.Text = em.Sector;
                }
                else
                {
                    txtApellido.Text = "";
                    txtMail.Text = "";
                    txtNombre.Text = "";
                    txtPassword.Text = "";
                    txtRePass.Text = "";
                    txtUsuario.Text = "";
                    cmbSector.Text = "";
                }
            }
            catch (Exception ex)
            {
                txtApellido.Text = "";
                txtMail.Text = "";
                txtNombre.Text = "";
                txtPassword.Text = "";
                txtRePass.Text = "";
                txtUsuario.Text = "";
                cmbSector.Text = "";
                Texto.escribirLog(ex.Message);
                return;
            }
        }

        private void btnModificar_Click(object sender, EventArgs e)
        {
            try
            {
                if (verificar())
                {
                    empleadosDTO em = new empleadosDTO();
                    em.Activo = true;
                    em.Apellido = txtApellido.Text;
                    em.Mail = txtMail.Text;
                    em.Nombre = txtNombre.Text;
                    em.Password = txtPassword.Text;
                    em.Usuario = txtUsuario.Text;
                    em.Sector = createSector.getSector(cmbSector.Text).Nombre;

                    Boolean modificado = createEmpleado.updateEmpleado(em, txtBusqueda.Text);

                    if (modificado)
                    {
                        MessageBox.Show("Empleado Modificado!!", "Exito", MessageBoxButtons.OK, MessageBoxIcon.Information);
                        this.Close();
                        this.Dispose();
                    }
                    else
                    {
                        MessageBox.Show("Error al intentar Modificar!!", "Error", MessageBoxButtons.OK, MessageBoxIcon.Error);
                        Texto.escribirLog("Error en modificarEmpleado");
                    }
                }
            }
            catch (Exception ex)
            {
                Texto.escribirLog(ex.Message);
            }
            
        }

        private bool verificar()
        {
            bool verificado = false;
            bool nombreCorrecto = false;
            bool apeCorrecto = false;
            bool secCorrecto = false;
            bool usuCorrecto = false;
            bool mailCorrecto = false;
            bool passCorrecta = false;

            if (!Validador.es_nombre(txtNombre))
            {
                errorProvider1.SetError(txtNombre, "Sólo Letras");
            }
            else
            {
                errorProvider1.SetError(txtNombre, String.Empty);
                nombreCorrecto = true;
            }

            if (!Validador.es_nombre(txtApellido))
            {
                errorProvider1.SetError(txtApellido, "Sólo Letras");
            }
            else
            {
                errorProvider1.SetError(txtApellido, String.Empty);
                apeCorrecto = true;
            }

            if (!Validador.es_nombre(cmbSector))
            {
                errorProvider1.SetError(cmbSector, "Sólo Letras");
            }
            else
            {
                errorProvider1.SetError(cmbSector, String.Empty);
                secCorrecto = true;
            }

            if (!Validador.es_cadena(txtUsuario))
            {
                errorProvider1.SetError(txtUsuario, "Sólo Letras");
            }
            else
            {
                errorProvider1.SetError(txtUsuario, String.Empty);
                usuCorrecto = true;
            }

            if (!Validador.es_email(txtMail))
            {
                errorProvider1.SetError(txtMail, "Ejemplo ejemplo@ejemplo.ejemplo");
            }
            else
            {
                errorProvider1.SetError(txtMail, String.Empty);
                mailCorrecto = true;
            }

            if (!Validador.es_password(txtPassword))
            {
                errorProvider1.SetError(txtPassword, "Entre 8 y 10 caracteres, por lo menos un digito y un"
                + "y un alfanumérico, y no puede contener caracteres especiales");
            }
            else
            {
                if (!txtPassword.Text.Equals(txtRePass.Text))
                {
                    errorProvider1.SetError(txtRePass, "Las contraseñas deben ser iguales");
                }
                else
                {
                    errorProvider1.SetError(txtPassword, String.Empty);
                    errorProvider1.SetError(txtRePass, String.Empty);
                    passCorrecta = true;
                }

            }

            if (nombreCorrecto && apeCorrecto && usuCorrecto
                && mailCorrecto && passCorrecta && secCorrecto)
            {
                verificado = true;
            }

            return verificado;
        }

        private void frmModificarEmpleado_Load(object sender, EventArgs e)
        {
            try
            {
                DataTable sectores = createSector.getAllSector();

                if (null != sectores)
                {
                    foreach (DataRow dr in sectores.Rows)
                    {
                        cmbSector.Items.Add(dr["Nombre"].ToString());
                    }
                }
            }
            catch (Exception ex)
            {
                Texto.escribirLog(ex.Message);
            }
            
        }
    }
}
